home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 16
/
CU Amiga Magazine's Super CD-ROM 16 (1997-10-16)(EMAP Images)(GB)[!][issue 1997-11].iso
/
CUCD
/
Utilities
/
ViNCEd
/
Include
/
window.h
< prev
Wrap
C/C++ Source or Header
|
1997-07-29
|
31KB
|
792 lines
#ifndef VNC_WINDOW_H
#define VNC_WINDOW_H
/*********************************************************
** ViNCEd **
** a DOS - window handler **
** **
** © 1991-97 THOR-Software inc. **
** Version 3.40 **
** **
** program version 1.23 05/03/91 THOR **
** update version 1.25 06/19/91 THOR **
** header file 06/19/91 THOR **
** updated to 3.30 03/31/97 THOR **
** updated to 3.40 05/05/97 THOR **
** updated to 3.41 05/19/97 THOR **
** **
** ViNCEd Window: The main structure (vcn) **
**-----------------------------------------------------**
** **
** all use at your own risk,etc.,etc. **
** **
** Everything declared as "reserved" or **
** "not used" is NOT free for your use, **
** it will propably used in a later release. **
** All FREE entries are free for public **
** use and are, if not otherwise noted, **
** initialized with ZERO **
*********************************************************/
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif
#ifndef EXEC_PORTS_H
#include <exec/ports.h>
#endif
#ifndef EXEC_SEMAPHORES_H
#include <exec/semaphores.h>
#endif
#ifndef EXEC_IO_H
#include <exec/io.h>
#endif
#ifndef EXEC_DEVICES_H
#include <exec/devices.h>
#endif
#ifndef DEVICES_TIMER_H
#include <devices/timer.h>
#endif
#ifndef DEVICES_CONSOLE_H
#include <devices/console.h>
#endif
#ifndef DEVICES_CONUNIT_H
#include <devices/conunit.h>
#endif
#ifndef DEVICES_KEYMAP_H
#include <devices/keymap.h>
#endif
#ifndef GRAPHICS_CLIP_H
#include <graphics/clip.h>
#endif
#ifndef GRAPHICS_GFX_H
#include <graphics/gfx.h>
#endif
#ifndef GRAPHICS_RASTPORT_H
#include <graphics/rastport.h>
#endif
#ifndef GRAPHICS_TEXT_H
#include <graphics/text.h>
#endif
#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif
#ifndef INTUITION_INTUITION_H
#include <intuition/intuition.h>
#endif
#ifndef INTUITION_SCREENS_H
#include <intuition/screens.h>
#endif
#ifndef DOS_DOS_H
#include <dos/dos.h>
#endif
#ifndef DOS_DOSEXTENS_H
#include <dos/dosextens.h>
#endif
#ifndef WORKBENCH_WORKBENCH_H
#include <workbench/workbench.h>
#endif
#ifndef VNC_VNCBASE_H
#include <vnc/vncbase.h>
#endif
#ifndef VNC_PREFS_H
#include <vnc/prefs.h>
#endif
#ifndef VNC_OWNER_H
#include <vnc/owner.h>
#endif
#ifndef VNC_DYNAMICS_H
#include <vnc/dynamics.h>
#endif
/* This is the description of the main structure of ViNCEd, the
ViNCWindow. It is linked to a group of "owners" that share
a common output window. This window is described by this structure */
struct ViNCWindow {
struct ViNCWindow *vcn_succ,*vcn_pred; /* linked list in
library base */
UWORD vcn_Version; /* version information */
UWORD vcn_Revision;
struct SignalSemaphore vcn_Semaphore; /* access grant. DO
NOT TOUCH. Use
LockWindow(),
UnLockWindow()! */
UWORD vcn_OpenCount; /* times DOS Open'd
this. No lock count,
no asyncs here */
/* base pointers */
struct VNCBase *vcn_VNCBase; /* library base */
struct ViUserNode *vcn_UserNode; /* for you. See below*/
/* important flags */
ULONG vcn_Flags;
ULONG vcn_ExtFlags; /* even more */
ULONG vnc_EventFlags; /* received events */
ULONG vcn_DOSFlags; /* much more */
ULONG vcn_RequestedEvents;/* receive which input
events */
/* links to the system */
struct Window *vcn_Window; /* the intuition window,
if open */
struct ViNCNewWindow *vcn_NewWindow; /* temporary for reopen */
struct RastPort *vcn_RastPort; /* private one, for drawing*/
struct Layer *vcn_Layer; /* the layer */
struct Screen *vcn_Screen; /* the screen the window is
displayed on, if open */
struct TmpRas *vcn_TmpRas; /* used to speedup
scrolling */
struct TextFont *vcn_TextFont; /* text used for rendering*/
void *vcn_MemPool; /* ViNCEd's private memory
pool. Do not touch, THIS
IS NOT EXEC COMPATIBLE */
struct DosList *vcn_DeviceNode; /* no BPTR! Pointer to
dos device entry */
struct ConUnit *vcn_ConUnit; /* ConUnit for backwards
compatibility */
struct KeyMap *vcn_KeyMap; /* used keyboard */
UWORD *vcn_TabStops; /* array of TAB positions*/
/* size of window and font */
UWORD vcn_TXSize;
UWORD vcn_TYSize; /* Size of the font */
UWORD vcn_TBaseLine; /* text base line */
UWORD vcn_TotalCount;/* total open count of
all structures.
The handler is allowed
to leave not until this
is zero */
UWORD vcn_LeftOffset;/* text starting offset
in the window */
UWORD vcn_TopOffset; /* same, but vertical */
UWORD vcn_RightOffset;
UWORD vcn_BottomOffset; /* for mini clipping */
UWORD vcn_Width;
UWORD vcn_Height; /* available area for
drawing in pixels */
UWORD vcn_CWidth;
UWORD vcn_CHeight; /* same in characters */
UWORD vcn_BProtLeft;
UWORD vcn_BProtTop;
UWORD vcn_BPropRight;
UWORD vcn_BPortBottom;
/* border protection
zone, against
italic characters */
UWORD vcn_RightScroll;
UWORD vcn_LeftScroll;/* scrolling margins*/
/* system lists */
struct MinList vcn_reservedlist;
struct MinList vcn_MemBlockList; /* dynamic memory pool*/
struct MinList vcn_InputBList; /* history lines */
struct MinList vcn_ButtonList; /* buttons */
struct MinList vcn_ReceivedReads;/* Read() pkt's Q here */
struct MinList vcn_ReceivedWrites;/* Write()'s Q here */
struct MinList vcn_OwnerList; /* list of owners, i.e.
named consoles.
!WARNING! Semaphore
protected! DO NOT
TOUCH! LockWindow()
is NOT ENOUGH here! */
struct MinList vcn_UpperLineList;/* upper lines */
struct MinList vcn_LowerLineList;/* lower lines */
struct MinList vcn_Spare2List; /* also free */
struct MinList vcn_HookList; /* window wide hooks */
struct MinList vcn_MacroList; /* user macros */
/* position of window & cursor */
UWORD vcn_CursorX;
UWORD vcn_CursorY; /* cursor position */
UWORD vcn_ScrollX; /* horizontal scrolling */
UWORD vcn_GfxScrollX; /* and what's seen on
the screen */
UWORD vcn_SearchX; /* private for pattern
searching */
UWORD vcn_DOSX; /* DOS cursor location for
mask input hack */
UBYTE vcn_RefreshBits; /* window refresh mode,
see below */
UBYTE vcn_RefreshCounter;/* times the refresh
was requested */
UWORD vcn_DeltaScroll; /* amount of lines
scrolled while output
disabled */
UWORD vcn_BlockX;
UWORD vcn_BlockY; /* position of end of block */
UWORD vcn_MenuNumber; /* menu selected last */
UWORD vcn_MenuQualifier; /* last menu qualifier */
struct Gadget *vcn_PressedGadget; /* gadget hold down, or
NULL */
/* colors and types. All come in packed version, see vnc/dynamics.h */
UBYTE vcn_ActualLineType; /* copy of cur. line */
UBYTE vcn_ActualLineMask; /* bitplane mask */
UBYTE vcn_ActualPenPair; /* colors and */
UBYTE vcn_ActualType; /* draw mode, packed*/
UBYTE vcn_UserPenPair;
UBYTE vcn_UserType; /* input style characters*/
UBYTE vcn_DOSPenPair;
UBYTE vcn_DOSType; /* dos (output) char's */
UBYTE vcn_BackFillPenPair;
UBYTE vcn_BackFillType; /* only BPen used */
UBYTE vcn_PlaneMaskPenPair;
UBYTE vcn_PlaneMaskType;
/* used for concurrent mode */
/* actual lines, in the screen and in the buffer,
line pointers, get adjusted if lines move in memory.
See dynamics.h */
struct DynLine *vcn_ActualLine; /* or NULL */
struct DynLine *vcn_ActualInput; /* current history line */
struct DynLine *vcn_LinePtr; /* general purpose
auto adjust pointer */
struct DynLine *vcn_AnchorLine; /* for block marking */
UWORD vcn_ActualY; /* position of line in
buffer */
UWORD vcn_AnchorLineX;/* reserved */
UWORD vcn_AnchorX;
UWORD vcn_AnchorY; /* anchor position of
current block */
/* line counters and thresholds */
UWORD vcn_InpCount; /* current size of history */
UWORD vcn_InpMax; /* maximal size of history */
UWORD vcn_UpperCount;
UWORD vcn_UpperMax; /* same for upper lines */
UWORD vcn_LowerCount;
UWORD vcn_LowerMax; /* same for lower lines */
/* internal buffers and their size */
struct VCharLine *vcn_EditBuffer; /* contains current line */
char *vcn_SearchBuffer; /* for history search */
char *vcn_RawKeyBuffer; /* for RawKeyConvert */
char *vcn_BufObsolete[4];
char *vcn_CutBuffer; /* for ^K, ^Y */
char *vcn_CommandBuffer; /* reserved */
char *vcn_WindowTitle;
char *vcn_ScreenTitle;
char *vcn_PubScreenName; /* like it says */
char *vnc_ProjectName; /* last name used for */
/* open or empty string */
/* 256 bytes long */
char *vcn_HistoryName; /* last name used */
/* for the history */
struct Message *vcn_CurrentSnip; /* snip in progress. Private */
struct DynLine *vnc_TABLinePtr; /* strictly for the TABHook */
char *vcn_MObsolete[6]; /* six obsolete pointers */
UWORD vcn_EditSize; /* size of EditBuffer */
UWORD vcn_SearchSize;
UWORD vcn_RawKeySize;
UWORD vcn_DOSSize; /* obsolete */
UWORD vcn_ASCSize; /* obsolete */
UWORD vcn_CutSize;
/* ports, iorequests and signal masks */
struct MsgPort *vcn_WindowPort; /* not IDCMP, private!*/
ULONG vcn_WindowSignalMask;
struct MsgPort *vcn_DOSPort; /* port of NULL owner */
ULONG vcn_DOSSignalMask;
struct MsgPort *vcn_IOPort; /* generic port for
IO interaction */
ULONG vcn_IOSignalMask;
struct IOStdReq *vcn_ConsoleIO; /* for console IO */
struct timerequest *vcn_TimerIO;
struct IOStdReq *vcn_InputIO;
struct IOStdReq *vcn_UserIORequest;
/* given to user by dos packet */
/* colors and more. Added in V2.36 */
UBYTE vcn_MenuDetailPen;
UBYTE vcn_MenuBlockPen;
UBYTE vcn_GlobalRasterMask;
/* used to speed up drawing */
UBYTE vcn_GlobalInvertMask;
/* used to draw the cursor */
/* gadgets and more. Please do not touch - these aren't the
actual gadgets if boopsis are available! */
struct Gadget *vcn_PropXGadget;
struct Gadget *vcn_PropYGadget;
struct Gadget *vcn_CommandGadget; /* reserved */
struct Menu *vcn_Menu; /* the menu in the window */
void *vcn_MenuRemember;
/* memory management for menu structs,
ViNCEd internal, NOT INTUITION COMPATIBLE*/
/* link to the dos */
struct DosPacket *vcn_ActualDP; /* packet in action */
ULONG vcn_longreserved;
struct ViOwner *vcn_ActualOwner; /* in foreground */
struct ViOwner *vcn_BREAKOwner; /* ^C whom ? */
struct ViOwner *vcn_OpenOwner; /* opened this window */
/* added these in 2.00 */
struct DynLine *vcn_DOSLine; /* dos set cursor here */
UWORD vcn_KeepOpenCounter;
/* window iconification forbid */
UWORD vcn_counterreserved;
/* added in 2.41 */
UWORD vcn_TopRows;
UWORD vcn_BottomRows;
/* scrolling borders, CSI R */
UWORD vcn_LeftColumns;
UWORD vcn_RightColumns; /* not yet used */
UWORD vcn_ItalicLeft;
UWORD vcn_ItalicRight;
/* additional room for
italic characters */
/* io requests for delay */
struct timerequest *vcn_PrivateTimerIO; /* intuition delay */
struct timerrequest *vcn_DelayTimerIO; /* for refresh */
struct timerrequest *vcn_ScrollTimerIO; /* for scrolling */
struct timerrequest *vcn_BlinkTimerIO; /* for cursor blinking */
/* delay times in micros, see prefs.h */
ULONG vcn_DelayMicros;
ULONG vcn_RebuildMicros;
ULONG vcn_SlowMicros;
ULONG vcn_BlinkMicros;
/* time stamp the gadget was pressed down */
ULONG vcn_TimeDown[2];
/* added in 3.00 */
UWORD vcn_SelectedLeftOffset;
UWORD vcn_SelectedTopOffset;
UWORD vcn_SelectedWidth;
UWORD vcn_SelectedHeight;
/* borders set by CBM CSI sequences */
/* even more gadgets. DO NOT TOUCH! These aren't the actual gadgets
if boopsis are available ! */
struct Gadget *vcn_LeftGadget;
struct Gadget *vcn_RightGadget;
struct Gadget *vcn_UpGadget;
struct Gadget *vcn_DownGadget; /* arrows */
struct Gadget *vcn_IconicGadget; /* iconification */
struct Gadget *vcn_FirstVNCGadget;
/* first private gadget added to
the window */
UWORD vcn_ViNCNumGads; /* number of gad's added */
UWORD vcn_ViNCGadPos; /* at which position ?*/
/* dimensions of the sizing gadgets and arrows... */
UWORD vcn_HorWidth;
UWORD vcn_HorHeight;
UWORD vcn_VertWidth;
UWORD vcn_VertHeight; /* arrow gadgets */
UWORD vcn_SizingWidth;
UWORD vcn_SizingHeight;
UWORD vcn_IconicWidth;
UWORD vcn_IconicHeight;
UWORD vcn_LeftTitle; /* free position near close */
UWORD vcn_LeftButton; /* left edge of leftmost
button, relative to
rightmost edge */
UWORD vcn_CloseWidth; /* width of the close
gadget */
UWORD vcn_DimReserved;
/* Stuff needed for iconification */
struct DiskObject *vcn_IconicDOP; /* icon for iconification */
struct AppIcon *vcn_AppIcon; /* the code we got from WB */
UBYTE vcn_IconicCode;/* internal use... */
UBYTE vcn_IconcRes[3]; /* reserved */
char *vcn_IconTitle; /* the title */
/* complete (unpacked) colors */
UBYTE vcn_UserExtAPen;
UBYTE vcn_UserExtBPen; /* user input colors */
UBYTE vcn_UserExtMode;
UBYTE vcn_UserExtReserved;
UBYTE vcn_DOSExtAPen;
UBYTE vcn_DOSExtBPen;
UBYTE vcn_DOSExtMode; /* same for output */
UBYTE vcn_DOSExtReserved;
UBYTE vcn_BackExtAPen; /* unused */
UBYTE vcn_BackExtBPen; /* backfill pen */
UBYTE vcn_BackExtMode; /* unused */
UBYTE vcn_BackExtReserved;
/* colors for rendering. Used by ViNCEd and SetVNC */
UBYTE vcn_LightColor; /* shine pen */
UBYTE vcn_DarkColor; /* shadow pen */
UBYTE vcn_FillColor; /* background. =0 */
UBYTE vcn_TextColor; /* used for text */
UBYTE vcn_MarkColor; /* special text */
UBYTE vcn_ArrowColor; /* colors of arrows */
UBYTE vcn_ArrowLight;
UBYTE vcn_ArrowDark; /* usually shine & shadow
but not in 1.2/1.3 */
UBYTE vcn_FillTextColor; /* text in the bar */
UBYTE vcn_reservedCols[3];
/* even more master pointers for the DynLines. Get relocated if
lines move. For private use only! */
struct DynLine *vcn_LinePtrA;
struct DynLine *vcn_LinePtrB;
struct DynLine *vcn_LinePtrC;
/* screen support */
ULONG vcn_ScreenSignalMask;
UBYTE vcn_ScreenSignalBit; /* for pubscreen
close */
UBYTE vcn_ScreenRes[3];
struct Screen *vcn_PubScreen; /* our public screen again,
if open */
struct TextAttr vcn_PrivAttr; /* not used, but reserved */
struct ViNCNewWindow *vcn_LastNewWindow;
/* used for re-opening */
/* final (ready for use) titles after parsing */
char *vcn_FinalTitle;
char *vcn_FinalScreenTitle;
char *vcn_FinalIconTitle;
/* again screen support */
ULONG vcn_DefaultModeID; /* for screens */
struct ViColorEntry vcn_Colors[16]; /* current colors */
/* TABHook support */
struct MsgPort *vcn_TABHookPort; /* for communications
with the ViNCFiler */
void *vnc_TABObs1;
void *vnc_TABObs2; /* no longer used */
ULONG vcn_TABTime[2]; /* time of last TAB */
ULONG vcn_TABFlags; /* private flags for the TABHook */
struct MinList vcn_TABExpansionList; /* what has been
found */
void *vcn_TABCurrentNode;
/* do not care about it */
struct ViOwner *vcn_TABOwner; /* who pressed TAB ?*/
UWORD vcn_TABLineLen;
UWORD vcn_TABCursorPos; /* and where ?*/
char *vcn_TABPatBuf; /* expanded pattern. */
char *vcn_TABRemainder;
UWORD vcn_GluePos; /* where to glue in again */
UWORD vcn_ArgNum; /* which argument to expand */
UWORD vcn_PatPos; /* where's #? ?*/
UWORD vcn_TABReserved;
struct AppWindow *vcn_AppWindow; /* for icon drop */
BPTR vcn_TABLock; /* expansion list is
relative to this one */
UWORD vcn_PathOnlyQualifier;
UWORD vcn_NameOnlyQualifier;
/* more color support */
UBYTE *vnc_ANSIPenColors[32]; /* 16 for the pens, */
/* 16 for the block hilite */
UBYTE *vcn_ANSIAlloc[32]; /* Each byte for an */
/* allocated pen */
/* default pens saved with CSI SPC s */
UBYTE vcn_DefaultExtAPen;
UBYTE vcn_DefaultExtBPen;
UBYTE vcn_DefaultExtMode;
UBYTE vcn_DefaultExtReserved;
/* default colors */
struct ViColorEntry vcn_DefaultColors[16];
struct ViColorEntry vcn_CursorColor;
struct ViColorEntry vcn_DefaultCursorColor;
/* private fields beyond this point, do not read!
do not allocate yourself, use AllocCNWindow() ! */
};
/* The next node is definitly for your private use! ViNCEd does not
touch it, except for one line master pointer that gets adjusted if
the line moves... */
/* Valid flags in vcn_Flags can be found in vpf_Flags, see Prefs.h.
Same goes for vcn_DOSFlags.
ExtFlags are for internal use. Not documented cause they will
change in the future.... */
/* Refresh modes... */
/* horizontal line */
#define VCNR_HOR_BIT 0
/* vertical screen */
#define VCNR_VERT_BIT 1
/* total refresh */
#define VCNR_TOTAL_BIT 2
/* layer must be refreshed */
#define VCNR_LAYER_BIT 3
/* currently refreshing */
#define VCNR_REFRESHING_BIT 6
/* masking forbidden, gets calculated */
#define VNCR_FULLMASK_BIT 7
struct ViUserNode {
struct ViNCWindow *ucn_Window; /* points back to structure
above */
struct VNCBase *ucn_LibBase; /* library base */
struct DynLine *ucn_UserLinePtr; /* gets updated.
Keep line ptrs
here! */
ULONG ucn_UserData;
void *ucn_UserPtr;
struct List ucn_UserList; /* Not initialized! */
UWORD ucn_UserReserved; /* don't touch this! */
UWORD ucn_UserCount;
UWORD ucn_UserX;
UWORD ucn_UserY;
};
/* The next one is used for OpenAWindow(), to attach an intuition window
to a ViNCWindow */
struct ViNCNewWindow {
WORD vnw_LeftEdge;
WORD vnw_TopEdge; /* position. Set top to -1
to adjust to drag bar */
WORD vnw_Width;
WORD vnw_Height; /* size. Set to -1 to get
maximal size */
UBYTE vnw_Pens[2]; /* reserved. Must be -1,-1 */
ULONG vnw_ViNCFlags; /* see below. No IDCMP! */
/* note that no IDCMP flags are here! ViNCEd does not use the
IDCMP, instead an input handler is used ! */
ULONG vnw_WindowFlags;
/* passed to intuition as
window flags */
WORD vnw_AltLeftEdge;
WORD vnw_AltTopEdge;
WORD vnw_AltWidth;
WORD vnw_AltHeight; /* alternate position */
char *vnw_Title;
void *vnw_Screen;
/* pointer to intuition screen, or name of
public screen */
struct BitMap *vnw_BitMap; /* for superbitmap. Not tested */
WORD vnw_MinWidth,vnw_MinHeight;
WORD vnw_MaxWidth,vnw_MaxHeight;
/* set to -1,-1 for maximal dimension! */
UWORD vnw_Type;
struct TagItem *vnw_Tags; /* expand on your own */
struct Window *vnw_UserWindow;
/* set to install in own
window */
char *vnw_ScreenTitle;
ULONG vnw_MonitorID; /* for private screens */
UWORD vnw_Depth; /* for depth of screen */
UBYTE vnw_Cols,vnw_Rows;
/* dimensions in characters, if
not zero */
struct TextFont *vnw_TextFont;
/* Text Font to use */
};
/* Useful screen types */
/* open on workbench or on ViNCEd screen (set proper flags, see below) */
#define VNW_STYPE_WORKBENCH 1
/* open on custom screen */
#define VNW_STYPE_CUSTOM 15
/* open on public screen */
#define VNW_STYPE_PUBLIC 2
/* Add the standard menu */
#define VNW_ADDMENU_BIT 30
#define VNW_ADDMENU_MASK (1L<<30)
/* Add X prop gadget */
#define VNW_ADDPROPX_BIT 29
#define VNW_ADDPROPX_MASK (1L<<29)
/* Add Y prop gadget */
#define VNW_ADDPROPY_BIT 28
#define VNW_ADDPROPY_MASK (1L<<28)
/* Fall back to WB if custom/public screen not available */
#define VNW_PUBFALLBACK_BIT 27
#define VNW_PUBFALLBACK_MASK (1L<<27)
/* screen title available */
#define VNW_WITHTITLE_BIT 26
#define VNW_WITHTITLE_MASK (1L<<26)
/* chunky graphics ? */
#define VNW_CHUNKYPIXEL_BIT 25
#define VNW_CHUNKYPIXEL_MASK (1L<<25)
/* shell window ? */
#define VNW_SHELL_BIT 24
#define VNW_SHELL_MASK (1L<<24)
/* add buttons ? */
#define VNW_ADDBUTTONS_BIT 23
#define VNW_ADDBUTTONS_MASK (1L<<23)
/* add iconify ? */
#define VNW_ADDICONIC_BIT 22
#define VNW_ADDICONIC_MASK (1L<<22)
/* open on own screen? Set type to VNW_STYPE_WORKBENCH in this case */
#define VNW_PRIVSCREEN_BIT 21
#define VNW_PRIVSCREEN_MASK (1L<<21)
/* remove dragbar ?*/
#define VNW_NODRAGBAR_BIT 20
#define VNW_NODRAGBAR_MASK (1L<<20)
/* keep user window open ?*/
#define VNW_KEEPOPEN_BIT 19
#define VNW_KEEPOPEN_MASK (1L<<19)
#endif